package com.hspedu.set_;

import java.util.HashSet;
import java.util.Objects;

/**
 * @author LiuJinTao
 * @className HashSetIncrement
 * @date 2024/06/07 15:40
 * @description HashSet 底层是 HashMap ，第一次添加时，
 *              table 数组扩容到 16，临界值 threshold 是 16 * 0.75 = 12
 *              如果 table 数组使用到临界值 12，就会扩容到 16 * 2 = 32
 *              新的临界值就是 24，
 */
@SuppressWarnings({"all"})
public class HashSetIncrement {
    public static void main(String[] args) {
        HashSet hashSet = new HashSet();
//        for (int i = 0; i <= 100; i++) {
//            hashSet.add(i);
//        }

        // 如果一条链表的元素个数达到 TREEIFY_THRESHOLD(默认是 8)
        // 并且 table 的大小 >= MIN_TREEIFY_CAPACITY(默认64)，就会进行树化(红黑树)
        // 负责任然采用数组扩容机制
//        for (int i = 0; i <= 12; i++) {
//            hashSet.add(new A(i));
//        }

        // 当我们向 hashSet 增加一个元素 -> Node -> 加入 table，就算是增加了一个
        for (int i = 0; i <= 7; i++) {// 在 table 的某一条链表上添加了 7个A对象
            hashSet.add(new A(i));
        }

        for (int i = 0; i <= 7; i++) {// 在 table 的某一条链表上添加了 7个B对象
            hashSet.add(new B(i));
        }
    }
}

class B {
    private int n;

    @Override
    public int hashCode() {
        return 200;
    }

    public B(int n) {
        this.n = n;
    }
}

class A {
    private int n;

    public A(int n) {
        this.n = n;
    }

    @Override
    public int hashCode() {
        return 100;
    }
}